///////////////////////////////////////////////////////////////////////////////
// File:        Logger.hpp
// Author:      671643387@qq.com
// Description:
///////////////////////////////////////////////////////////////////////////////

#ifndef MONKEY_COMMON_LOGGER_HPP_
#define MONKEY_COMMON_LOGGER_HPP_

#if defined(_MSC_VER) && (_MSC_VER >= 1200)
# pragma once
#endif

#include <stdio.h>
#include <string>

namespace monkey
{
    namespace common
    {
        class Logger
        {
        public:
            enum Level
            {
                LOGLV_ERROR     = 1,
                LOGLV_WARNING,
                LOGLV_LOG
            };

        public:
            Logger(std::string norFile, std::string errFile = "error.log");
            ~Logger(void);

        public:
            void Log(const char* format, ...);
            void Warning(const char* format, ...);
            void Error(const char* format, ...);

            void Log(const char* mod, const char* format, ...);
            void Warning(const char* mod, const char* format, ...);
            void Error(const char* mod, const char* format, ...);

            void SetLevel(Level level);
            Level GetLevel(void) const;

        private:
            Level level_;

            FILE* norFile_;
            FILE* errFile_;
        };
    }
}

extern monkey::common::Logger g_logger;

#define MKLOG_LOG(fmt, ...) g_logger.Log(fmt, __VA_ARGS__);

#endif /* MONKEY_COMMON_LOGGER_HPP_ */
